Туман... Хороший эффект для повышения реальности, не правда ли ? Оказывается он есть в VRML и определяется следующим образом:
Fog {
exposedField SFColor color 1 1 1 # [0,1]
exposedField SFString fogType "LINEAR"
exposedField SFFloat visibilityRange 0 # [0,)
eventIn SFBool set_bind
eventOut SFBool isBound
}
Здесь поле visibilityRange задает предел видимости в метрах, после которого изображение полностью пропадает в тумане. Для примера создадим мир из пяти кубов и попробуем добавить к нему туман:
#VRML V2.0 utf8
# берем куб из бибилиотеки прототипов
EXTERNPROTO BOX_NEW[
field SFColor color
field SFVec3f position
field SFVec3f size
] "protolib.wrl#BOX_NEW"
Background {
skyColor 1 1 1
}
# создаем виртуальную сцену
Group {
children[
BOX_NEW { color 1 0 0 }
BOX_NEW { position 0 0 -10 color 1 0 0}
BOX_NEW { position 0 0 -20 color 1 0 0}
BOX_NEW { position 0 0 -30 color 1 0 0}
BOX_NEW { position 0 0 -40 color 1 0 0}
]
}
# добавляем туман
Fog {
color 1 1 1
visibilityRange 60
}
В результате изменения поля visibilityRange от 60 метров до 20 получаем такие вот картинки:
| visibilityRange = | 60 метров | 50 метров | 40 метров |
|---|---|---|---|
|
|
| |
| 30 метров | 20 метров | 10 метров | |
|
|
|
Следующее поле color более интересное. Это поле задает цвет тумана. Что это значит ? Это значит, что все объекты, которые находятся "в тумане" рисуются этим цветом. Если объекты находятся чуть-чуть в тумане, то браузер использует меньше цвет тумана. Вообще проще продемонстрировать на примере:
| color = | 1 1 1 (белый) | 1 0 0 (красный) | 1 1 0 (желтый) |
|---|---|---|---|
|
|
| |
| 0 1 0 (зеленый) | 0 1 1 (сиреневый) | 0 0 1 (синий) | |
|
|
|
Здесь четко видно, как браузер закрашивает объекты. Единственный и очень большой минус этого узла такой, что эффект тумана не влияет на фон, т.е. на то, что было задано с помощью узла Background (см. предыдущий шаг). Так как в примере мы использовали цвет фона белым, то и получили соответствующий эффект только когда туман белого цвета. Из-за этого правило - использовать цвет фона и тумана надо одинаковыми. При этом придется забыть в панораме, да впрочем какая может быть панорама, когда "собственных рук в тумане не видно" :)
Еще один параметр тумана fogType задает тип тумана. Типов тумана это функция, по которой высчитывается туман. Таких функций пока две: линейная - LINEAR и экспоненциальная - EXPONENTIAL. По умолчанию туман вырисовывается по линейному закону. Чтобы использовать экспоненциальный надо сделать так:
Fog {
color 1 1 1
fogType "EXPONENTIAL"
visibilityRange 50
}
К моему огромному сожалению, в VRML навеске, которая идет вместе с WIN98 в комплекте, тип тумана ни на что не влиял. Вообще говоря браузеров VRML достаточно много и точно также как и в HTML между ними существуют какие-то мелкие различия, проявляющиеся как раз во время отображения сцены. Связано это с тем, что для "рендеринга" применяются разные технологии, например, OpenGL или Direct3D.